home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 039a / uw201.zip / UW_HELP1.HLP < prev    next >
Text File  |  1991-10-07  |  22KB  |  537 lines

  1. `co(4,7);────────────────────────── /// Structures/Globals ──────────────────────────`color();
  2.  
  3. ┌──────────────────────────────────────────────────────────────────────────┐    
  4. │                  `keyword(RECT,/// RECT);                                                         `keyword(WINDOW,/// WINDOW);                                                 │
  5. │                  `keyword(EVENT,/// EVENT);                                                      `keyword(M_RESET,/// M_RESET);                                              │
  6. │                  `keyword(M_LOC,/// M_LOC);                                                      `keyword(M_MOVE,/// M_MOVE);                                                 │
  7. │                  `keyword(PRINT,/// PRINT);                                                      `keyword(Ega/Vga Globals,/// Ega/Vga Globals);                                         │
  8. │                  `keyword(Video Globals,/// Video Globals);                                      `keyword(Event Globals,/// Event Globals);                                  │
  9. │                  `keyword(Default Attributes,/// Default Attributes);                             `keyword(Cursor Globals,/// Cursor Globals);                                 │
  10. │                  `keyword(DesqView Globals,/// DesqView Globals);                                 `keyword(Manager Globals,/// Manager Globals);                                │
  11. └──────────────────────────────────────────────────────────────────────────┘
  12.  
  13.     These are the structures and global variables that are used in the
  14.     UltraWin library.  The structures defined are those used for the
  15.     windowing routines and mouse support.  The globals include screen
  16.     and video mode variables, Desqview variables for Desqview/Windows
  17.     compatibility, and window manager window pointers.    Include the
  18.     uw_globx.h file for access to the globals, and uw.h for the
  19.     structures.
  20.  
  21. `co(10,1);/// RECT`co();
  22. `co(11,1);  typedef struct rect_struct
  23.     {
  24.         int x_min, x_max, y_min, y_max;
  25.     } RECT;`co();
  26.  
  27.     This structure is used for general screen area definition, and is
  28.     used internally by the WINDOW struct.
  29.  
  30. `co(10,1);/// WINDOW`co();
  31.         This structure is used by the UltraWin library for all window
  32.     operations.  The structure is used internally by the library, so
  33.     the information below is mainly shown to satisfy any curiosity.
  34.     It is recommended that these structure elements be accessed by
  35.     the functions provided, where available, and not directly.    This
  36.     allows us to change and enhance the package in the future while
  37.     maintaining compatibility with your code.  This is a good 
  38.     programming practice in any case. Furthermore, we plan to move into
  39.     the OOP realm, a good reason not to bypass the "information hiding."
  40.     
  41. `co(11,1);  typedef struct w_struct
  42.     {
  43.         struct w_struct *next;                 /* next window in linked list        */
  44.         struct w_struct *previous;         /* previous window in list             */
  45.         RECT                        pane;                  /* the window rectangle                    */
  46.         RECT                        old_pane;          /* for full size toggle                    */
  47.         int                         rows;                  /* save buffer rows and columns    */
  48.         int                         cols;
  49.         int                         csr_x;                 /* the "soft" cursor location    */
  50.         int                         csr_y;
  51.         int                         att;                     /* the window's attribute        */
  52.         int                         bdr_att;             /* the window's border attribute */
  53.         int                         bdr_style;         /* the border style                            */
  54.         int                         name_loc;          /* CENTERED, LEFTJUST, RIGHTJUST */
  55.         char                        *name;                 /* pointer to window name                */
  56.         char                        *save;                 /* pointer to save buffer area     */
  57.         char                        *buff;                 /* pointer to write buffer area    */
  58.         char                        *mask;                 /* pointer to window buffer mask */
  59.  
  60.         uchar                     *tabs;                 /* tabs stops                                        */
  61.         int                         reg_s,reg_e;     /* scroll region start and end     */
  62.  
  63.         unsigned                w_wrap        : 1; /* word wrap on/off                            */
  64.         unsigned                hidden        : 1; /* 1 if window hidden                        */
  65.         unsigned                overlapped: 1; /* 1 if window overlapped                */
  66.         unsigned                csr_adv     : 1; /* advance the cursor                        */
  67.         unsigned                csr_on        : 1; /* does flashing cursor track?     */
  68.         unsigned                inside        : 1; /* 1 if bordered and inside            */
  69.         unsigned                mask_on     : 1; /* 1 if window mask is active        */
  70.         unsigned                cr_lf         : 1; /* 1 if cr translated to cr/lf     */
  71.         unsigned                full_size : 1; /* 1 if window full sized                */
  72.         unsigned                popup         : 1; /* 1 if window is popup                    */
  73.         unsigned                scroll        : 1; /* 1 if window auto-scrolls            */
  74.         unsigned                bs_clear    : 1; /* 1 if backspace is destructive */
  75.         unsigned                eol_wrap    : 1; /* 1 if cursor wraps at end of ln*/
  76.         unsigned                unused        : 3; /* some spare bits               */
  77.         void            *user_ptr;     /* user expansion pointer                */
  78.         uchar           user_exp[4];   /* user expansion space                  */
  79.         void            *sys_ptr;         /* system expansion pointer            */
  80.         uchar           sys_exp[4];      /* system expansion space              */
  81.     } WINDOW;`co();
  82.  
  83. `co(10,1);/// EVENT`co();
  84. `co(11,1);  typedef struct event_struct
  85.     {
  86.         char        is_mouse;
  87.         int         key;
  88.         int         mod;
  89.         int         m_x, m_y;
  90.         char        m_count, m_button;
  91.     } EVENT;`co();
  92.  
  93.         This structure is used by the global variable "Event", which is
  94.     used by wait_event() and event_pending() to return information.
  95.     
  96.     The "is_mouse" member is used as a boolean to indicate if the event
  97.     was a keyboard event (is_mouse=0) or a mouse event (is_mouse=1).
  98.     
  99.     The "key" member will contain the key value, and the member "mod"
  100.     will contain bit settings to indicate if a key combination was used.
  101.     This includes the left and right shift combinations, Ctrl or Alt
  102.     combinations, and whether Scroll Lock, Num Lock, or Caps Lock are
  103.     set (see uw_keys.h for defines).
  104.     
  105.     The "m_x" and "m_y" members will contain the x,y coordinate (from
  106.     0..Vcols-1 for x, 0..Vrows-1 for y) of the mouse event, m_count will
  107.     contain the number of presses, and m_button has the button pressed
  108.     (LB, MB, or RB).
  109.  
  110. `co(10,1);/// M_RESET`co();
  111. `co(11,1);  typedef struct reset_struct
  112.     {
  113.         int exists;
  114.         int n_buttons;
  115.     } M_RESET;`co();
  116.  
  117.     This structure is used internally by the init_mouse() and end_mouse()
  118.     functions. It is used when starting or ending the program, and when
  119.     first called returns if the mouse is available.  The function
  120.     init_mouse() uses this structure to set the global Mouse_exists
  121.     boolean variable.
  122.  
  123. `co(10,1);/// M_LOC`co();
  124. `co(11,1);  typedef struct loc_struct
  125.     {
  126.         int button_status;
  127.         int count;
  128.         int col;
  129.         int row;
  130.     } M_LOC;`co();
  131.     
  132.     This structure is used by m_pos, m_pressed, and m_released, as well
  133.     as internally by event_pending.  If you want to handle the mouse
  134.     yourself, bypassing UltraWin's event handling capability, use the
  135.     m_pos, m_pressed and m_released functions to get mouse pressed and
  136.     coordinate information using a variable of type M_LOC.
  137.  
  138. `co(10,1);/// M_MOVE`co();
  139. `co(11,1);  typedef struct move_struct
  140.     {
  141.         int h_count;
  142.         int v_count;
  143.     } M_MOVE;`co();
  144.  
  145.     This structure is used only by the m_motion function, which reports
  146.     the net movement of the mouse cursor between m_motion calls.
  147.  
  148. `co(10,1);/// PRINT`co();
  149. typedef struct printer
  150. {
  151.     int   active;                                            /* set to 1 if printer init'd/active    */
  152.     int   halt;                       /* set to 1 to temporarily stop printer */
  153.     int   prt_dev;                    /* file handle for printer device                */
  154.     char  device[81];                 /* name of printer device               */
  155.     int   prt_buff[2];                                /* file handles for printer buffer            */
  156.     char  buffer[81];                 /* name of printer buffer               */
  157.     int   cr_cnt;                     /* number of carriage returns to send   */
  158.     int   lf_cnt;                         /* number of line feeds to send         */
  159.     int   block_mode;                                    /* allows faster output on block devices*/
  160.  
  161.     long  max_que_size;                                /* maximum size of print que                      */
  162.     long  init_que_size;                            /* initial size of print que                        */
  163.     long  curr_que_size;                            /* current size of print que                        */
  164.     long  read;                                                /* print que read  index                */
  165.     long  write;                      /* print que write index                */
  166.     long  cnt;                           /* print que cnt (number of bytes in q) */
  167.  
  168.     uchar *que;                              /* pointer to print que data            */
  169.     uchar *xlat;                      /* pointer to translation table                    */
  170.     int   xlat_flag;                  /* translation flag                                            */
  171. } PRINT;
  172.  
  173.     This structure is used by the print routines in uw_print.c.  For further
  174.     information, see `keyword(Print Support,[uw_help6.hlp]/// Print Support);.
  175.  
  176. `co(10,1);/// Video Globals`co();
  177. `co(11,1);    uchar far *Screen;`co();
  178.     
  179.     This is a far pointer to the video display area.    It's value will
  180.     depend on if you are using a monochrome or color display, and whether
  181.     a control program like Windows or Desqview is being used.  You may
  182.     modify this variable to redirect output anywhere in memory, but be
  183.     careful to use an area you are sure is safe.
  184.  
  185. `co(11,1);    int V_mode;`co();
  186.     
  187.     This is an integer that contains the text mode that was used before
  188.     the call to init_video or force_video.    This is saved in V_mode and
  189.     is used in the call to end_video to restore the original mode.
  190.  
  191. `co(11,1);    uchar V_cols, V_rows;`co();
  192.     
  193.     These two variables contain the number of columns and rows available
  194.     on the text screen, and are set by the init_video and force_video
  195.     functions.    The video screen is therefore defined as 0..V_cols-1 and
  196.     0..V_rows-1!
  197.  
  198. `co(10,1);/// Event Globals`co();
  199. `co(11,1);    EVENT Event;`co();
  200.     
  201.     This global variable is used by the event_pending() and wait_event()
  202.     functions to pass back information about the type of event as well
  203.     as mouse/keyboard information.
  204.  
  205. `co(11,1);    int Mouse_exists;`co();
  206.     
  207.     This global variable is set by the init_mouse function to either
  208.     TRUE (1) or FALSE (0) depending on whether a Microsoft or compatible
  209.     mouse is connected.
  210.  
  211. `co(10,1);/// Default Attributes`co();
  212. `co(11,1);    uchar Dflt_att, Dflt_bdr_att;`co();
  213.     
  214.     These attributes are used to set the default window colors when
  215.     wn_create is called.    If you do not use the wn_color and wn_bdr_color
  216.     macros to set the window colors, you will get these default 
  217.     attributes.
  218.  
  219. `co(10,1);/// Cursor Globals`co();
  220. `co(11,1); int Csr_visible;`co();
  221.     
  222.     This boolean is either TRUE (1) or FALSE (0) depending on whether
  223.     the hardware cursor is visible.
  224.  
  225.  
  226. `co(11,1);    int Csr_in_use;`co();
  227.  
  228.     This boolean is either TRUE (1) or FALSE (0) depending on whether
  229.     the hardware cursor is being used.    The window input routine
  230.     wn_gets sets this variable to TRUE while the cursor is being used,
  231.     then sets it back to FALSE when finished.
  232.  
  233. `co(10,1);/// DesqView Globals`co();
  234.     int DV_seg, DV_off, DV_flag, DV_upd;
  235.  
  236.     These are integers that are used to maintain DesqView compatibility.
  237.     They are used internal to the library.
  238.  
  239. `co(10,1);/// Manager Globals`co();
  240. `co(11,1);    WINDOW *First_window, *Last_window`co();
  241.  
  242.     These are pointers to the first and last windows in the window
  243.     manager's linked list.  These are NULL on startup, and are set
  244.     by the add_window and remove_window functions as windows are added
  245.     to the manager.  You can use these to determine the top window
  246.     (Last_window) or the bottom window (First_window) at any time when
  247.     using the manager.
  248.  
  249. `co(4,7);────────────────────────── /// Video Initialization ────────────────────────`co();
  250.  
  251. ┌──────────────────────────────────────────────────────────────────────────┐    
  252. │                 `keyword(init_video,/// init_video);                       `keyword(force_video,/// force_video);                       │
  253. │                 `keyword(end_video,/// end_video);                          `keyword(set_vid_addr,/// set_vid_addr);                      │ 
  254. └──────────────────────────────────────────────────────────────────────────┘
  255.  
  256.         These functions allow you to initialize the text screen to a
  257.     specific mode, and return back to the mode in use before the
  258.     initialization.  Initialization of the text screen is the first step
  259.     that should be taken in a C program that utilizes the UltraWin
  260.     library.
  261.     
  262.         The UltraWin library supports 80x25 Monochrome and Color modes,
  263.     as well as the 80x43 EGA color and 80x50 VGA color mode.  Higher
  264.     resolution text screens that some of the new VGA cards can produce
  265.     are also supported.
  266.  
  267. `co(10,1);/// init_video`co();   `keyword(source,[UW_VID.C]~init_video);                  
  268.     Initializes the text screen to a specific mode, specified not by
  269.     mode number, but by number of columns and rows.  The video mode that
  270.     best matches the number of columns and rows passed will be 
  271.     selected.  The function will set the two global variables V_cols
  272.     and V_rows to the actual number that are available.  This allows
  273.     the user to specify an 80x50 screen, and have init_video set the
  274.     closest text mode to this size that your video card will
  275.     accomodate.
  276.  
  277. Prototype:
  278.     void init_video(int cols, int rows);
  279.  
  280. Parameters:
  281. `co(11,1);    int cols, int rows`co();
  282.         The number of columns and rows desired for the screen.
  283.  
  284. Usage:
  285.     init_video( 80, 50 );
  286.  
  287. `co(10,1);/// force_video`co();   `keyword(source,[UW_VID.C]~force_video);
  288.     This function is similar to init_video, except the text bios mode
  289.     number is passed as well as the number of columns and rows.  This
  290.     allows one of the non-standard VGA modes (specific to your VGA
  291.     card) to be set.
  292.  
  293. Prototype:
  294.     void force_video( int force_mode, int cols, int rows );
  295.  
  296. Parameters:
  297. `co(11,1);    int force_mode`co();
  298.         The actual mode number listed in the manual for your video board.
  299. `co(11,1);    int cols, int rows`co();
  300.         The number of columns and rows desired for the screen.
  301.  
  302. Usage:
  303.     force_video( 0x60, 132, 60 );
  304.  
  305. `co(10,1);/// end_video`co();   `keyword(source,[UW_VID.C]~end_video);
  306.     Restores the video mode in use before the call to init_video. Call
  307.     this function just before you exit your program.
  308.  
  309. Prototype:
  310.     void end_video();
  311.  
  312. Parameters:
  313.     None.
  314.  
  315. Usage:
  316.     end_video();
  317.  
  318. `co(10,1);/// set_vid_addr`co();   `keyword(source,[UW_VID.C]~set_vid_addr);
  319.     This routine overrides the default video address and sets it to the
  320.     desired segment and offset.
  321.  
  322. Prototype:
  323.     void set_vid_addr( int segment, int offset );
  324.  
  325. Parameters:
  326. `co(11,1);    int segment, offset`co();
  327.         The desired segment and offset for your new video address.
  328.  
  329. Usage:
  330. `co(11,1);    uchar far *old_screen;`co();
  331.     ...
  332.     old_screen = Screen;
  333.     set_vid_addr( 0xB000, 0x8000 );
  334.     ...
  335.     Screen = old_screen;
  336.  
  337. `co(4,7);────────────────────────── /// Window Maintenance ──────────────────────────`co();
  338.  
  339. ┌──────────────────────────────────────────────────────────────────────────┐    
  340. │               `keyword(wn_create,/// wn_create);                     `keyword(wn_set,/// wn_set);                       │
  341. │               `keyword(wn_clear,/// wn_clear);                      `keyword(wn_border,/// wn_border);                    │
  342. │               `keyword(wn_move,/// wn_move);                       `keyword(set_mask,/// set_mask);                     │
  343. │               `keyword(clear_mask,/// clear_mask);                    `keyword(wn_destroy,/// wn_destroy);                   │
  344. └──────────────────────────────────────────────────────────────────────────┘
  345.  
  346.         These are the functions used for window creation, destruction,
  347.     and placement on the text screen.  There are special functions that
  348.     allow you to "mask off" sections of a window so that output does
  349.     not occur to that area, as well as restoring what was behind a
  350.     window when it was created.
  351.  
  352. `co(10,1);/// wn_create`co();   `keyword(source,[UW_WN.C]~wn_create);
  353.     This function will create a window with the size determined by the
  354.     upper left and lower right coordinates passed by integer.  Several
  355.     border styles can be used, as well as a mode for saving what is
  356.     behind the window, to be restored on window destruction.    Please
  357.     note that wn_create does not allocate the window for you, you must
  358.     declare your windows yourself either as locals/globals, passing the 
  359.     address of the window to wn_create, or as pointers that are
  360.     "malloc"ed or "calloc"ed, passing the pointer to wn_create.
  361.     
  362. Prototype:
  363.     void wn_create( int x_min, int y_min, int x_max, int y_max,
  364.                                     int bdr, int mode, WINDOW *wnp );
  365.  
  366. Parameters:
  367. `co(11,1);    int x_min, int y_min, int x_max, int y_max`co();
  368.         The coordinates of the upper left and lower right corners of the
  369.         window to create.  These range from 0,0 (upper left corner of
  370.         the screen) to the max number of columns and rows minus one
  371.         (lower right corner of the screen).
  372. `co(11,1);    int bdr`co();
  373.         The border style to use, namely one of the defines NO_BDR,
  374.         SGL_BDR, DBL_BDR, SLD_BDR, or DUAL_BDR.
  375. `co(11,1);    int mode`co();
  376.         The popup mode, can be either WN_NORMAL or WN_POPUP.    Normal 
  377.         windows when destroyed do not restore what is behind them, while
  378.         popup windows do.  Normal windows therefore use less memory.
  379. `co(11,1);    WINDOW *wnp`co();
  380.         A pointer to the window.    Can be the address of a global variable
  381.         of type WINDOW, or a pointer that has been allocated with malloc
  382.         or calloc.    The wn_create function will initialize the contents
  383.         of the window for you, so all that is necessary is to pass it to
  384.         this function!
  385.  
  386. Usage:
  387.     WINDOW *wnp;
  388.     ...
  389.     wn_create( 0, 0, 79, 24, SGL_BDR, POPUP, wnp );
  390.  
  391. `co(10,1);/// wn_set`co();   `keyword(source,[UW_WN.C]~wn_set);
  392.     This function sets the window on the screen, saving the contents of
  393.     what's behind the window if it was defined as WN_POPUP when created
  394.     with wn_create.
  395.  
  396. Prototype:
  397.     void wn_set( WINDOW *wnp );
  398.  
  399. Parameters:
  400. `co(11,1);    WINDOW *wnp`co();
  401.         A pointer to the window, or address of a WINDOW variable.
  402.  
  403. Usage:
  404.     WINDOW *wnp;
  405.     ...
  406.     wn_set( wnp );
  407.  
  408. `co(10,1);/// wn_clear`co();   `keyword(source,[UW_WN.C]~wn_clear);
  409.     This function clears the contents of a window, excluding the border,
  410.     if present.  The window must be first created with wn_create, then
  411.     set on the video screen with wn_set.
  412.  
  413. Prototype:
  414.     void wn_clear( WINDOW *wnp );
  415.  
  416. Parameters:
  417. `co(11,1);    WINDOW *wnp`co();
  418.         A pointer to the window.
  419.  
  420. Usage:
  421.     WINDOW *wnp;
  422.     ...
  423.     wn_clear( wnp );
  424.  
  425. `co(10,1);/// wn_border`co();   `keyword(source,[UW_BDR.C]~wn_border);
  426.     This function draws the border to the window, if the window border
  427.     exists (call wn_create with something besides NO_BDR, or set the
  428.     bdr_style field of the window to one of the border defines).
  429.     Use this function to redraw the border.
  430.  
  431. Prototype:
  432.     void wn_border( WINDOW *wnp );
  433.  
  434. Parameters:
  435. `co(11,1);    WINDOW *wnp`co();
  436.         A pointer to the window.
  437.  
  438. Usage:
  439.     WINDOW *wnp;
  440.     ...
  441.     wn_border( wnp );
  442.  
  443. `co(10,1);/// wn_move`co();   `keyword(source,[UW_WN.C]~wn_move);
  444.     Take a window that has been placed on the video screen with wn_set,
  445.     and move it to a new location.    Please note that the background
  446.     will be restored for you when the window is moved if you create the
  447.     window with the WN_POPUP value as the mode parameter to wn_create.
  448.  
  449. Prototype:
  450.     wn_move( int col, int row, WINDOW *wnp );
  451.  
  452. Parameters:
  453. `co(11,1);    int col, row`co();
  454.         The column and row where the window is to be moved.  This location
  455.         is where the upper left hand corner of the window will be placed.
  456.     WINDOW *wnp
  457.         A pointer to the window to move.
  458.  
  459. Usage:
  460.     WINDOW *wnp;
  461.     ...
  462.     wn_move( 3, 7, wnp );
  463.  
  464. `co(10,1);/// set_mask`co();   `keyword(source,[UW_MASK.C]~set_mask);
  465.     This function is to be called when a window is added on top of
  466.     another window.  The function will see if the second window (top) 
  467.     overlaps the first window (bottom), and masks off for output the
  468.     area that overlaps.  If the windows are not overlapped, then no
  469.     masking is necessary, and the mask is not performed.    Masking the
  470.     bottom window prevents output to the region of the bottom window
  471.     overlapped, giving the appearance that the window updates "in the
  472.     background".  Call set_mask on a window for each window that is
  473.     to be displayed "on top" of it.  You do not need to use this 
  474.     function when using the window manager, as it takes care of all
  475.     masking when a window is added or removed!
  476.  
  477. Prototype:
  478.     void set_mask( int mode, WINDOW *wnp1, WINDOW *wnp2 );
  479.  
  480. Parameters:
  481. `co(11,1);    int mode`co();
  482.         A value 1 (ON) or 0 (OFF) to indicate if the mask is to be added
  483.         or removed.
  484. `co(11,1);    WINDOW *wnp1`co();
  485.         The window for which the mask is to be set (the "bottom" one).
  486. `co(11,1);    WINDOW *wnp2`co();
  487.         The window used to set the mask of the bottom window. (The top
  488.         window).
  489.  
  490. Usage:
  491.     WINDOW bottom_win, top_win;
  492.     ...
  493.     set_mask(ON, &bottom_win, &top_win);
  494.     set_mask(OFF, &bottom_win, &top_win);
  495.  
  496. `co(10,1);/// clear_mask`co();   `keyword(source,[UW_MASK.C]~clear_mask);
  497.     This function clears the mask for the window passed.    All areas of
  498.     the window will change when the window is refreshed, or when any 
  499.     information is written to the window, the window scrolls, etc.
  500.     The window manager will clear any masks necessary when you add or
  501.     delete windows.
  502.  
  503. Prototype:
  504.     void clear_mask( WINDOW *wnp );
  505.  
  506. Parameters:
  507. `co(11,1);    WINDOW *wnp1`co();
  508.         A pointer to type WINDOW that specifies the window to clear.
  509.  
  510. Usage:
  511.     WINDOW win;
  512.     ...
  513.     clear_mask( &win );
  514.  
  515. `co(10,1);/// wn_destroy`co();   `keyword(source,[UW_WN.C]~wn_destroy);
  516.     This function restores what was behind the window before wn_create
  517.     (if it was defined using WN_POPUP), and deallocates memory used by
  518.     the window.  Be sure you destroy any temporary window that you have
  519.     created with wn_create, or you will consume valuable memory if you
  520.     do not.  This is also good practice at the end of your program,
  521.     before calling end_video and returning to DOS.
  522.  
  523. Prototype:
  524.     void wn_destroy( WINDOW *wnp );
  525.  
  526. Parameters:
  527. `co(11,1);    WINDOW *wnp`co();
  528.         A pointer to the window, or address of a WINDOW variable.
  529.  
  530. Usage:
  531.     WINDOW *wnp;
  532.     ...
  533.     wn_destroy( wnp );
  534.  
  535.  
  536. `co(4,7);─ End ──────────────────────────────────────────────────────────────────────`co();`sound(1024,10);
  537.